package com.qunar.train.mock.controller;

import com.qunar.train.mock.config.MockQconfig;
import com.qunar.train.mock.config.MockQswitch;
import com.qunar.train.mock.config.MockTrainConfig;
import com.qunar.train.mock.database.MockQueryDAO;
import com.qunar.train.mock.database.MockUpdateDAO;
import com.qunar.train.mock.logger.MockLogger;
import com.qunar.train.mock.network.MockNetWork;
import com.qunar.train.mock.qmq.MockMessageConsumer;
import com.qunar.train.mock.sedis.MockAdvancedSedis;
import com.qunar.train.mock.sedis.MockSedis;
import com.qunar.train.mock.sedis.MockSedis2;
import com.qunar.train.mock.util.ClassUtils;
import com.qunar.train.mock.util.GenerateInterfaceImpl;

/**
 * @author: xudong.tai
 * @since: 2018/6/14 Description:
 **/
public class TrainMock {
    public static void init() {
        MockLogger.mock();
        MockNetWork.mock();
        MockTrainConfig.mock();
        GenerateInterfaceImpl.generateDubboInterfaceImpl(true);
    }

    public static void initNew() {
        MockLogger.mock();
        MockNetWork.mock();
        MockTrainConfig.mock();
        MockQswitch.qswitchsMock();
        GenerateInterfaceImpl.generateDubboInterfaceImplNew(true);
    }

    /**
     * 这样拆分是为了解决各个模块版本不一问题，具体模块使用时可以自己mock不用的函数
     */
    public static void clear() {
        //dubbo
        clearDubbo();

        //qmq
        clearQmq();

        //sedis
        clearSedis();
        clearSedis2();

        //db
        clearDB();

        //Logger
        MockLogger.clear();

        //Qconfig
        MockQconfig.clear();
    }

    public static void clearQmq() {
        MockMessageConsumer.clear();
    }

    public static void clearDubbo() {
        ClassUtils.clear();
    }

    public static void clearSedis() {
        MockAdvancedSedis.clear();
        MockSedis.clear();
    }

    public static void clearSedis2() {
        MockSedis2.clear();
    }

    public static void clearDB() {
        MockQueryDAO.clear();
        MockUpdateDAO.clear();
    }
}
